home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / BBS-Archive / Comm / AmiTCP30b2.lha / netinclude / charread.h < prev    next >
C/C++ Source or Header  |  1993-08-12  |  1KB  |  65 lines

  1. /*
  2.  * charread.h
  3.  * 
  4.  * Author: Tomi Ollila <too@cs.hut.fi>
  5.  * 
  6.  * This module is FREEWARE. Standard "NO WARRANTY" disclaimer applies.
  7.  *
  8.  * Created: Wed Aug  5 18:57:25 1992 too
  9.  * Last modified: Wed Jun 16 19:16:02 1993 too
  10.  * 
  11.  * $Id: charread.h,v 1.1 1993/06/16 16:41:47 too Exp $
  12.  *
  13.  * HISTORY
  14.  * $Log: charread.h,v $
  15.  * Revision 1.1  1993/06/16  16:41:47  too
  16.  * Initial revision
  17.  *
  18.  *
  19.  */
  20.  
  21. #ifndef CHARREAD_H
  22. #define CHARREAD_H
  23.  
  24. #ifndef RC_BUFSIZE
  25. #define RC_BUFSIZE 1024
  26. #endif
  27.  
  28. struct CharRead {
  29.   int    rc_Fd;
  30.   int    rc_Size;
  31.   int    rc_Curr;
  32.   char    rc_Buffer[RC_BUFSIZE];
  33. };
  34.  
  35. #define RC_DO_SELECT    -3
  36. #define RC_EOF        -2
  37. #define RC_ERROR    -1
  38.  
  39. #define initCharRead(rc, fd) do { \
  40.                   (rc)->rc_Fd = fd;  \
  41.                       (rc)->rc_Size = 0; \
  42.                   (rc)->rc_Curr = 1; \
  43.                  } while(0)
  44.  
  45. #ifdef AMIGA
  46. #define RC_R_E_A_D(a, b, c) recv(a, b, c, 0)
  47. #else
  48. #define RC_R_E_A_D(a, b, c) read(a, b, c)
  49. #endif
  50.  
  51. #define charRead(rc) \
  52.     ((rc)->rc_Curr >= (rc)->rc_Size ? \
  53.         (rc)->rc_Curr++ == (rc)->rc_Size ? \
  54.             RC_DO_SELECT: \
  55.             ((rc)->rc_Size = RC_R_E_A_D((rc)->rc_Fd, \
  56.                             (rc)->rc_Buffer, \
  57.                             RC_BUFSIZE)) <= 0 ? \
  58.                 (rc)->rc_Size == 0 ? \
  59.                     RC_EOF:    \
  60.                     RC_ERROR: \
  61.                 (rc)->rc_Buffer[((rc)->rc_Curr = 1) - 1]: \
  62.             (rc)->rc_Buffer[(rc)->rc_Curr++])
  63.  
  64. #endif /* _CHARREAD_H_ */
  65.